// lodash的函数柯里化

// 底层就是 函数嵌套函数  return一个函数  调用的时候形成闭包。 可以使得参数一个一个传  可形成不同的闭包
const _ = require("lodash");
const getSum = (a, b, c) => a + b + c;
// const curry = _.curry(getSum);
// console.log(curry(1, 2, 3));
// console.log(curry(1, 3)(2));

const match = _.curry((reg, str) => str.match(reg));

const getSpace = match(/\s+/g);

const filter = _.curry((fn, array) => array.filter(fn));

const spaceFilter = filter(getSpace);

console.log(spaceFilter(["sd asd", "ads"]));

// 封装柯里化方法

function curry(fn) {
    return function curried(...args) {
        // 判断形参的个数和传参的个数
        if (args.length < fn.length) {
            return function () {
                return curried(...args.concat(Array.from(arguments)));
            };
        }
        return fn(...args);
    };
}

const testCurry = curry(getSum);
console.log(testCurry(1)(2, 3));
console.log(testCurry(1)(2)(3));
